import { silentLogin, getUserDetailInfo, checkUserInfo, generateOAuth2Url } from '@/api/index'

/**
 * 投票服务类
 * 处理H5登录、用户信息获取和投票流程
 */
class VoteService {
  constructor() {
    this.baseUrl = window.location.origin
  }

  /**
   * 静默登录（获取openId）
   * @param {string} code 微信授权码
   * @returns {Promise} 登录结果
   */
  async silentLogin(code) {
    try {
      const formData = new FormData()
      formData.append('code', code)
      
      const response = await silentLogin(formData)
      return response
    } catch (error) {
      console.error('静默登录失败:', error)
      throw error
    }
  }

  /**
   * 检查用户信息完整性
   * @param {string} openId 用户openId
   * @returns {Promise} 检查结果
   */
  async checkUserInfo(openId) {
    try {
      const response = await checkUserInfo(openId)
      return response
    } catch (error) {
      console.error('检查用户信息失败:', error)
      throw error
    }
  }

  /**
   * 获取用户详细信息
   * @param {string} code 微信授权码（需要snsapi_userinfo授权）
   * @returns {Promise} 用户详细信息
   */
  async getUserDetailInfo(code) {
    try {
      const formData = new FormData()
      formData.append('code', code)
      
      const response = await getUserDetailInfo(formData)
      return response
    } catch (error) {
      console.error('获取用户详细信息失败:', error)
      throw error
    }
  }

  /**
   * 生成微信授权URL
   * @param {string} redirectUri 回调地址
   * @param {string} scope 授权范围 snsapi_base(静默) 或 snsapi_userinfo(用户信息)
   * @param {string} state 自定义参数
   * @returns {Promise} 授权URL
   */
  async generateOAuth2Url(redirectUri, scope = 'snsapi_base', state = '') {
    try {
      const response = await generateOAuth2Url(redirectUri, scope, state)
      return response
    } catch (error) {
      console.error('生成授权URL失败:', error)
      throw error
    }
  }

  /**
   * 完整的投票流程
   * @param {string} participantId 选手ID
   * @param {string} openId 用户openId
   * @returns {Promise} 投票结果
   */
  async vote(participantId, openId) {
    try {
      // 1. 检查用户信息是否完整
      const userInfoCheck = await this.checkUserInfo(openId)
      
      if (!userInfoCheck.data.hasNickname) {
        // 用户信息不完整，需要引导用户授权获取详细信息
        return {
          needAuth: true,
          message: '需要获取您的微信昵称和头像才能投票',
          openId: openId
        }
      }
      
      // 2. 用户信息完整，执行投票
      const voteData = {
        participantId: participantId,
        voterOpenId: openId,
        voterNickname: userInfoCheck.data.nickname,
        voterAvatar: userInfoCheck.data.headImgUrl
      }
      
      // 这里调用您的投票接口
      // const response = await voteApi(voteData)
      // return response
      
      return {
        success: true,
        message: '投票成功',
        data: voteData
      }
      
    } catch (error) {
      console.error('投票失败:', error)
      throw error
    }
  }

  /**
   * 引导用户授权获取详细信息
   * @param {string} redirectUri 回调地址
   */
  async redirectToUserInfoAuth(redirectUri) {
    try {
      const response = await this.generateOAuth2Url(redirectUri, 'snsapi_userinfo', 'userinfo')
      if (response.data) {
        window.location.href = response.data
      }
    } catch (error) {
      console.error('跳转授权页面失败:', error)
      throw error
    }
  }

  /**
   * 处理微信授权回调
   * @param {string} code 授权码
   * @param {string} state 状态参数
   * @returns {Promise} 处理结果
   */
  async handleAuthCallback(code, state) {
    try {
      if (state === 'userinfo') {
        // 用户信息授权回调
        const userInfo = await this.getUserDetailInfo(code)
        return {
          type: 'userinfo',
          data: userInfo
        }
      } else {
        // 静默授权回调
        const loginResult = await this.silentLogin(code)
        return {
          type: 'login',
          data: loginResult
        }
      }
    } catch (error) {
      console.error('处理授权回调失败:', error)
      throw error
    }
  }
}

export default new VoteService()
